home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 301-325 / disk_319 / cnewssrc / uupc.lzh / uupc / ndir.c < prev    next >
C/C++ Source or Header  |  1990-01-16  |  2KB  |  134 lines

  1. /*
  2.  *    ndir
  3.  *
  4.  *    Amiga (Lattice & Manx) "ndir" Library
  5.  *
  6.  *    $Id: ndir.c,v 1.2 90/01/16 10:26:52 crash Exp Locker: crash $
  7.  */
  8.  
  9. #ifndef lint
  10. static char RCSid[] = "$Id: ndir.c,v 1.2 90/01/16 10:26:52 crash Exp Locker: crash $";
  11. #endif /* lint */
  12.  
  13. #include "ndir.h"
  14. #include <exec/memory.h>
  15.  
  16. #ifdef MCH_AMIGA
  17. # include <functions.h>        /* Manx */
  18. #else
  19. # include <proto/exec.h>    /* Lattice */
  20. #endif
  21.  
  22. #ifdef TEST
  23. # include <stdio.h>
  24. #endif
  25.  
  26. /*
  27.  * support for Berkeley directory reading routine on a V7 file system
  28.  */
  29.  
  30. extern char *malloc();
  31.  
  32. /*
  33.  * open a directory.
  34.  */
  35. DIR *opendir(name)
  36. char *name;
  37. {
  38.     register DIR *dirp;
  39.     struct FileLock *lock;
  40.  
  41. #ifdef TEST
  42.     fprintf( stderr, "opendir: Opening \"%s\"\n", name );
  43. #endif
  44.     if ((lock = Lock( name, ACCESS_READ )) == NULL) {
  45. #ifdef TEST
  46.         fprintf( stderr, "opendir: Can't open.\n" );
  47. #endif
  48.         return NULL;
  49.     }
  50.     if ((dirp = (DIR *)malloc(sizeof(DIR))) == NULL) {
  51. #ifdef TEST
  52.         fprintf( stderr, "opendir: couldn't malloc %d\n", sizeof(DIR));
  53. #endif
  54.         UnLock( lock );
  55.         return NULL;
  56.     }
  57.     if (!Examine( lock, &dirp->fib)) {
  58. #ifdef TEST
  59.          fprintf( stderr, "opendir: Couldn't Examine directory\n" );
  60. #endif
  61.          free( dirp );
  62.          UnLock( lock );
  63.     }
  64.     dirp->lock = lock;
  65. #ifdef TEST
  66.     fputs("opendir: Sucessful\n", stderr);
  67. #endif
  68.     return dirp;
  69. }
  70.  
  71.  
  72. /*
  73.  * get next entry in a directory.
  74.  */
  75. struct direct *readdir(dirp)
  76. register DIR *dirp;
  77. {
  78.     static struct direct dir;
  79.  
  80.     while ( ExNext( dirp->lock, &dirp->fib ) ) {
  81.         if ( dirp->fib.fib_DirEntryType <= 0 ) {
  82.             dir.d_ino = 0;
  83.             strcpy( dir.d_name, dirp->fib.fib_FileName );
  84. #ifdef TEST
  85.             fprintf( stderr, "readdir: OK \"%s\"\n",  dir.d_name);
  86. #endif
  87.             dir.d_namlen = strlen(dir.d_name);
  88.             dir.d_reclen = DIRSIZ(&dir);
  89.             return (&dir);
  90.         }
  91.     }
  92. #ifdef TEST
  93.     fprintf( stderr, "readdir: No More Entries.\n" );
  94. #endif
  95.     strcpy( dir.d_name, "" );
  96.     return NULL;
  97. }
  98.  
  99.  
  100. /*
  101.  * close a directory.
  102.  */
  103. void closedir(dirp)
  104. register DIR *dirp;
  105. {
  106.     UnLock( dirp->lock );
  107.     free((char *)dirp);
  108. }
  109.  
  110.  
  111. #ifdef TEST
  112. #include <errno.h>
  113.  
  114. main()
  115. {
  116.     char command[100];
  117.  
  118.     struct DIR *dirp;
  119.     struct direct *dp;
  120.     
  121.     while(gets(command) != NULL) {
  122.         fprintf( stderr, "test: %s\n", command );
  123.         if ((dirp = opendir( command )) == NULL ) {
  124.             fprintf( stderr, "couldn't open dir %s\n", command );
  125.         } else {
  126.             while ((dp = readdir(dirp)) != NULL) 
  127.                 fprintf( stderr, "%s", dp->d_name );
  128.         
  129.             closedir( dirp );
  130.         }
  131.     }
  132. }
  133. #endif
  134.